using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace Sigecov.Models.Mapping
{
    public class ClienteMap : EntityTypeConfiguration<Cliente>
    {
        public ClienteMap()
        {
            // Primary Key
            this.HasKey(t => t.cliId);

            // Properties
            this.Property(t => t.cliEmpresa)
                .IsRequired()
                .HasMaxLength(40);

            this.Property(t => t.cliContato)
                .IsRequired()
                .HasMaxLength(40);

            this.Property(t => t.cliCargoContato)
                .HasMaxLength(50);

            this.Property(t => t.cliTipoLogradouro)
                .HasMaxLength(30);

            this.Property(t => t.cliLogradouro)
                .IsRequired()
                .HasMaxLength(100);

            this.Property(t => t.cliBairro)
                .IsRequired()
                .HasMaxLength(40);

            this.Property(t => t.cliComplemento)
                .HasMaxLength(50);

            this.Property(t => t.cliCep)
                .IsRequired()
                .HasMaxLength(10);

            this.Property(t => t.cliTelefone)
                .IsRequired()
                .HasMaxLength(14);

            this.Property(t => t.cliFax)
                .HasMaxLength(14);

            this.Property(t => t.cliEmail)
                .IsRequired()
                .HasMaxLength(60);

            // Table & Column Mappings
            this.ToTable("Clientes");
            this.Property(t => t.cliId).HasColumnName("cliId");
            this.Property(t => t.cliEmpresa).HasColumnName("cliEmpresa");
            this.Property(t => t.cliContato).HasColumnName("cliContato");
            this.Property(t => t.cliCargoContato).HasColumnName("cliCargoContato");
            this.Property(t => t.cliTipoLogradouro).HasColumnName("cliTipoLogradouro");
            this.Property(t => t.cliLogradouro).HasColumnName("cliLogradouro");
            this.Property(t => t.cliNumero).HasColumnName("cliNumero");
            this.Property(t => t.cliBairro).HasColumnName("cliBairro");
            this.Property(t => t.cliComplemento).HasColumnName("cliComplemento");
            this.Property(t => t.cliCep).HasColumnName("cliCep");
            this.Property(t => t.cliTelefone).HasColumnName("cliTelefone");
            this.Property(t => t.cliFax).HasColumnName("cliFax");
            this.Property(t => t.cliEmail).HasColumnName("cliEmail");
            this.Property(t => t.cidId).HasColumnName("cidId");

            // Relationships
            this.HasRequired(t => t.Cidade)
                .WithMany(t => t.Clientes)
                .HasForeignKey(d => d.cidId);

        }
    }
}
